package com.suiwei.advanced.algorithm;

import org.junit.jupiter.api.Test;
/**
 * @author suiwei
 * @date 2023/7/10 22:16
 */
public class Recursion {
  @Test
  void test() {
    System.out.println(jc(5));
  }

  //直接递归：方法直接调用自己
  //栈溢出异常：java.lang.StackOverflowError
  void method() {
    method();
  }
  //间接递归
  //栈溢出异常：java.lang.StackOverflowError
  void methodA() {
    methodB();
  }
  void methodB() {
    methodA();
  }

  // 5!=5*4！；4！=4*3！......1!=1
  int jc(int num) {
    if (num == 1) { // 出口；递归问题，第一步找出口
      return 1;
    } else {
      return num * jc(num - 1);
    }
  }
}
